﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Data
{
    public class Dados
    {
        public Dados(string campo, string componenteCampo, bool nulo, bool autoinc, tipo tipoCampo, string label)
        {
            this.campo = campo;
            this.componenteCampo = componenteCampo;
            this.nulo = nulo;
            this.autoinc = autoinc;
            this.tipoCampo = tipoCampo;
            this.label = label;
        }

        private string label;

        public string Label
        {
            get { return label; }
            set { label = value; }
        }

        private string campo;

        public string Campo
        {
            get { return campo; }
            set { campo = value; }
        }
        private string componenteCampo;

        public string ComponenteCampo
        {
            get { return componenteCampo; }
            set { componenteCampo = value; }
        }
        private bool nulo;

        public bool Nulo
        {
            get { return nulo; }
            set { nulo = value; }
        }
        private bool autoinc;

        public bool Autoinc
        {
            get { return autoinc; }
            set { autoinc = value; }
        }
        private string tabelaFK;

        public string TabelaFK
        {
            get { return tabelaFK; }
            set { tabelaFK = value; }
        }
        private string campoFK;

        public string CampoFK
        {
            get { return campoFK; }
            set { campoFK = value; }
        }
        private chave chaveTabela;

        public chave ChaveTabela
        {
            get { return chaveTabela; }
            set { chaveTabela = value; }
        }
        private tipo tipoCampo;

        public tipo TipoCampo
        {
            get { return tipoCampo; }
            set { tipoCampo = value; }
        }

        public enum chave
        {
            primaria = 0,
            estrangeira = 1,
            nao = 3
        }

        public enum tipo
        {
            texto = 0,
            numero = 1,
            sim_nao = 2,
            data = 3
        }

        public int convertToInt(bool value)
        {
            return (value) ? 1 : 0;
        }

        public bool isValid(Object value)
        {

            if (!this.nulo)
            {
                if (value is string && (string)(value) == "" && this.campo != "GrupoPai")
                {
                    MessageBox.Show("O campo " + campo + " deve ser preenchido!");
                    return false;
                }
            }
            if (this.tipoCampo == Dados.tipo.numero)
            {
                if (value != null && int.Parse(value.ToString()) < 0)
                {
                    MessageBox.Show("O campo " + campo + " não pode conter valor negativo");
                    return false;
                }
            }

            return true;
        }

        public Object getValue(TabPage tb)
        {

            Control[] control = tb.Controls.Find(this.ComponenteCampo, true);

            Object value = null;

            if (control[0] is TextBox)
            {
                TextBox t = (TextBox)control[0];
                value = t.Text;
            }
            else if (control[0] is CheckBox)
            {
                CheckBox cb = (CheckBox)control[0];
                value = convertToInt(cb.Checked);
            }
            else if (control[0] is ComboBox)
            {
                ComboBox cb = (ComboBox)control[0];
                value = (cb.ValueMember == "") ? cb.SelectedIndex : cb.SelectedValue;
                try
                {
                    if (!this.nulo && (int)(value) == -1)
                    {
                        value = "";
                    }
                }
                catch
                { value = ""; }
            }
            else if (control[0] is NumericUpDown)
            {
                NumericUpDown cb = (NumericUpDown)control[0];
                value = cb.Value;
            }
            else if (control[0] is MaskedTextBox)
            {
                MaskedTextBox m = (MaskedTextBox)control[0];
                value = m.Text;
            }
            else if (control[0] is DateTimePicker)
            {
                DateTimePicker cb = (DateTimePicker)control[0];
                value = cb.Value.ToShortDateString();
            }
            else
            {
                //MessageBox.Show("faioooooo :/");
            }

            return (isValid(value)) ? value : -1;
        }
    }
}
